<?php
declare(strict_types=1);

namespace app\utils;

use app\exceptions\SystemException;

/**
 * 字符串工具类
 *
 * @package app\utils
 */
class StringUtil
{

    /**
     * @param string $str
     * @return bool
     */
    public static function containAlphabet(string $str)
    {
        $temp = [
            'a', 'b', 'c', 'd', 'e', 'f', 'g',
            'h', 'i', 'j', 'k', 'l', 'm', 'n',
            'o', 'p', 'q', 'r', 's', 't',
            'u', 'v', 'w', 'x', 'y', 'z',
            'A', 'B', 'C', 'D', 'E', 'F', 'G',
            'H', 'I', 'J', 'K', 'L', 'M', 'N',
            'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z',
        ];
        $flag = false;
        $length = strlen($str);
        for ($i = 0; $i < $length; $i++) {
            if (in_array($str[0], $temp)) {
                $flag = true;
                break;
            }
        }
        return $flag;
    }

    /**
     * 过滤掉emoji表情
     *
     * @param string $str
     * @return string
     */
    public static function filterEmoji($str)
    {
        $str = preg_replace_callback(
            '/./u',
            function (array $match) {
                return strlen($match[0]) >= 4 ? '' : $match[0];
            },
            $str);
        return $str;
    }
    /**
     * 手机号的判断条件 兼容到香港乃至全球地区
     * @param $num
     * @return bool
     */
    public static function isPhoneNumGlobal($num)
    {
        $match = "/(^1[3,4,5,6,7,8,9][0-9]{9}$)|(^[1-9]{1}[0-9]{7,9}$)/";
        if (preg_match($match, $num)) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 校验手机号
     *
     * @param string $mobile
     * @return string
     * @throws SystemException
     */
    public static function verifyMobile(string $mobile)
    {
        if (!preg_match("/^1[3465789]\d{9}$/", $mobile)) {
            throw new SystemException('请填写正确的手机号');
        }
        return true;
    }
    /**
     * 随机生成指定位(默认16位)的字符串
     *
     * @param int $length 要生成字符的个数，默认16个
     * @return string 生成的字符串
     */
    public static function genRandomStr($length = 16)
    {
        $str = '';
        $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
        $max = strlen($strPol) - 1;
        for ($i = 0; $i < $length; $i++) {
            $str .= $strPol[mt_rand(0, $max)];
        }
        return $str;
    }


    /**
     * 检测是否含有特殊字符串
     * @param $str
     * @return bool
     * @throws SystemException
     */
    public static function isRegularString(string $str)
    {

        $pregs = '/select|insert|update|CR|document|LF|eval|delete|script|alert|\'|\/\*|\#|\/|\*|\=|\~|\*@|\*!|\$|\%|\^|\&|\(|\)|\/|\/\/|\.\.\/|\.\/|union|into|load_file|outfile/';
        //字符串
        $check = preg_match($pregs, $str);
        if ($check == 1) {
            throw new SystemException('含有特殊符号，请重新填写！');
        }
        return true;
    }
    /**
     * 匹配价格
     * @param $price
     * @return bool
     */
    public static function checkPrice($price) {
        // 可以匹配1.11,10.11  或 0.11
        if (preg_match('/^[1-9]+\d*(.\d{1,2})?$|^\d+.\d{1,2}$/',$price)) {  // ? 0次或1次, + 1次或多次, * 0次或多次
            return true;
        } else {
            return false;
        }
    }
}